#ifndef _ML_DATA_VECTOR_ADDER_H_
#define _ML_DATA_VECTOR_ADDER_H_
#include "MLCommon.h"
#include "MLDataVector.h"
_MYLABLIB_BEGIN

template<typename T>
class CMLDataVectorAdder
{
public:
	// Constructor and Destructor
	CMLDataVectorAdder(void){};
	~CMLDataVectorAdder(void){};

public:
	// Methods
	inline void Initialize(const CMLDataVector<T>& initVector, const CMLDataVector<T> maxValue)
	{
		m_dataVector = initVector;
		m_maxValue = maxValue;
	}

	inline const CMLDataVector<T>& GetDataVector() const
	{
		return m_dataVector;
	}

	inline bool AddOne()
	{
		int d = 0;
		while(( m_dataVector[d] += (T)1 ) >= m_maxValue[d])
		{
			m_dataVector[d] = (T)0;
			d++;
			if (d >= m_dataVector.size())
				return false;
		}
		return true;
	}

private:
	// Fields
	CMLDataVector<T> m_maxValue;
	CMLDataVector<T> m_dataVector;
};


_MYLABLIB_END
#endif
